Documentation du package ondetools

Pascal Irz

<<<<<<< HEAD

20 mai 2020

=======

18 mai 2020

>>>>>>> 5462df1196f2427d082ae7576e0a6efe652a4457

Pourquoi ce package ?

Le package ondetools vise à faciliter le chargement et l’exploitation des données de l’observatoire des étiages qui sont téléchargeables depuis l’url suivante.

La logique suivie est celle d’une chaîne de traitements depuis le téléchargement des données brutes sur le web jusqu’à la visualisation cartographique.

Il propose un ensemble de fonctions qui permettent de :
- télécharger les fichiers bruts annuels annuels
- les décompresser
- les assembler
- recoder les régions (fusions)
- pivoter le tableau en format “large”
- compléter les données des stations par des données sur les SAGEs
- calculer les statistiques d’assecs estivaux
- visualiser graphiquement le “tableau de bord” de chacune des stations
- exporter ces graphiques au format .bmp
- visualiser les données en cartographie dynamique

La chaîne de traitements étant dédiée aux données ONDE au format standardisé de leur diffusion, elle ne fonctionne que dans la mesure où l’utilisateur conserve les noms des variables. Le moindre renommage et plus rien ne marche !

Installation

Comme tout package R, {ondetools} doit d’abord être téléchargé, puis activé.

Pour le télécharger, suivre les instructions de ce post de blog.

L’activation du package se fait par la fonction library. Pour fonctionner, il fait appel à d’autres packages qui sont aussi installés par défaut quand on installe {ondetools}.

library(ondetools)

D’autres packages sont nécessaires, non pas au fonctionnement de {ondetools}, mais pour exécuter le présent tutoriel :

# Téléchargement
install.packages(c("DT", "lubridate", "mapview", "sf", "tidyverse"))
# Activation
library(DT)
library(lubridate)
#> 
#> Attachement du package : 'lubridate'
#> The following objects are masked from 'package:base':
#> 
#>     date, intersect, setdiff, union
library(mapview)
library(sf) 
#> Linking to GEOS 3.6.1, GDAL 2.2.3, PROJ 4.9.3
library(tidyverse)
<<<<<<< HEAD
#> -- Attaching packages ------------------------------------------------------------ tidyverse 1.3.0 --
=======
#> -- Attaching packages -------------------------------------------------------------------- tidyverse 1.3.0 --
>>>>>>> 5462df1196f2427d082ae7576e0a6efe652a4457
#> v ggplot2 3.3.0     v purrr   0.3.4
#> v tibble  3.0.1     v dplyr   0.8.5
#> v tidyr   1.0.2     v stringr 1.4.0
#> v readr   1.3.1     v forcats 0.5.0
<<<<<<< HEAD
#> -- Conflicts --------------------------------------------------------------- tidyverse_conflicts() --
=======
#> -- Conflicts ----------------------------------------------------------------------- tidyverse_conflicts() --
>>>>>>> 5462df1196f2427d082ae7576e0a6efe652a4457
#> x lubridate::as.difftime() masks base::as.difftime()
#> x lubridate::date()        masks base::date()
#> x dplyr::filter()          masks stats::filter()
#> x lubridate::intersect()   masks base::intersect()
#> x dplyr::lag()             masks stats::lag()
#> x lubridate::setdiff()     masks base::setdiff()
#> x lubridate::union()       masks base::union()

Chaque fonction est accompagnée d’un fichier d’aide. Exemple :

?calculer_assecs_ete()

Chargement et mise en forme des données tabulées

Téléchargement et stockage des fichiers

Le stockage par défaut de ces fichiers est dans un sous-répertoire du répertoire de travail “raw_data/fichiers_onde_annuels_zippes”.

Vérification que les fichiers annuels zippés sont dans le bon répertoire

Assemblage des fichiers annuels

Il s’agit d’empiler les fichiers annuels.

Si l’on souhaite supprimer le répertoire contenant les fichiers téléchargés :

Vérification que tout s’est bien passé

Les dimensions du tableau de données ou data.frame :

Il y a donc 173437 lignes et 20 colonnes.

Les caractéristiques des variables peuvent être obtenues par la fonction str() :

Il y a donc 173407 lignes et 20 colonnes.

Les caractéristiques des variables peuvent être obtenues par la fonction str() :

str(onde)
#> Classes 'data.table' and 'data.frame':   173407 obs. of  20 variables:
>>>>>>> 5462df1196f2427d082ae7576e0a6efe652a4457
#>  $ CdSiteHydro            : chr  "Q7350001" "Q7430001" "Q5340001" "Q5150001" ...
#>  $ LbSiteHydro            : chr  "Le Saison à Osserain-Rivareyte" "Le Saleys à Carresse-Cassaber" "La Bayse à Os-Marsillon" "L'Ousse à Idron" ...
#>  $ Annee                  : int  2012 2012 2012 2012 2012 2012 2012 2012 2012 2012 ...
#>  $ TypeCampObservations   : chr  "complémentaire" "complémentaire" "complémentaire" "complémentaire" ...
#>  $ DtRealObservation      : chr  "2012-07-30" "2012-07-30" "2012-07-30" "2012-07-30" ...
#>  $ LbRsObservationDpt     : chr  "Ecoulement visible acceptable" "Ecoulement visible faible" "Ecoulement visible faible" "Ecoulement visible acceptable" ...
#>  $ RsObservationDpt       : chr  "1a" "1f" "1f" "1a" ...
#>  $ LbRsObservationNat     : chr  "Ecoulement visible" "Ecoulement visible" "Ecoulement visible" "Ecoulement visible" ...
#>  $ RsObservationNat       : int  1 1 1 1 1 1 1 1 1 1 ...
#>  $ NomEntiteHydrographique: chr  "Le Saison" "Le Saleys" "La Bayse" "Le ruisseau de l'Ousse" ...
#>  $ CdTronconHydrographique: chr  "Q7--0250" "Q74-0400" "Q53-0400" "Q51-0430" ...
#>  $ LbCommune              : chr  "OSSERAIN-RIVAREYTE" "CARRESSE-CASSABER" "OS-MARSILLON" "IDRON" ...
#>  $ CdCommune              : chr  "64435" "64168" "64431" "64269" ...
#>  $ CdDepartement          : chr  "64" "64" "64" "64" ...
#>  $ LbRegion               : chr  "NOUVELLE-AQUITAINE" "NOUVELLE-AQUITAINE" "NOUVELLE-AQUITAINE" "NOUVELLE-AQUITAINE" ...
#>  $ NomCircAdminBassin     : chr  "ADOUR-GARONNE" "ADOUR-GARONNE" "ADOUR-GARONNE" "ADOUR-GARONNE" ...
#>  $ CoordXSiteHydro        : num  379930 375783 406896 430192 391135 ...
#>  $ CoordYSiteHydro        : num  6261559 6273600 6261103 6249253 6257888 ...
#>  $ ProjCoordSiteHydro     : int  26 26 26 26 26 26 26 26 26 26 ...
#>  $ FLG                    : chr  "FLG" "FLG" "FLG" "FLG" ...
#>  - attr(*, ".internal.selfref")=<externalptr>

Création de la variable Mois

Une variable Mois est créée à partir de la date d’observation. Pour un usage graphique ultérieur, elle est en format texte à 2 caractères.

Filtrage sur le périmètre géographique

Il existe plusieurs variables correspondants aux départements, régions, districts hydrographiques qui permettent de filtrer simplement. Ici, nous nous intéressons aux régions Bretagne et Pays-de-la-Loire.

Gestion des campagnes

La fonction gerer_les_campagnes filtre les données pour ne conserver qu’une observation par mois. De mai à septembre inclus, c’est l’observation de la campagne “usuelle” qui est retenue. D’octobre à avril, c’est la plus sèche des observations “complémentaires”.

Passage en format “large”

Pour certains usages comme la visualisation des observations d’un mois donné (ex : juillet 2018) avec QGIS, il peut être intéressant de disposer des mêmes données, mais avec une colonne par année_mois. La fonction passer_en_format_large() permet cette manipulation en pivotant les cellules à la manière d’un tableau croisé dynamique dans Excel®.

Exportation en format CSV

On peut à ce stade exporter les tableaux de données en format texte directement lisible par Excel dans un répertoire “processed_data”.

Création de la couche géographique des stations

Il s’agit de transformer le tableau de données au format “long” en objet géographique “points” au moyen de ses colonnes de coordonnées (CoordXSiteHydro et CoordYSiteHydro). Le système de projection est Lambert 93.

stations_onde_geo <- creer_couche_geo_stations(onde_df = onde)

Vérification

ggplot(data = stations_onde_geo) + geom_sf()

Caractérisation des assecs estivaux

Pour visualiser la fréquence des assecs sur le périmètre étudié, il est nécessaire d’agréger les données par station. Comme les efforts de collecte de données sont standardisés pour les campagnes “usuelles” (une observation par mois), tandis que les campagnes compléentaires varient fortement d’un département à un autre, seules les premières sont retenues.

Calcul

La fonction calculer_assecs_ete() retourne un dataframe donnant pour chaque station (ligne) le nombre d’observations, le nombre d’assecs et le pourcentage des observations où la station était en assec.

On complète la couche géographique des stations avec ces données.

Si nécessaire, on peut reprojeter en WGS84 - le système utilisé par OpenStreetMap ou GoogleMaps.

Vérification visuelle

Si l’on veut vérifier la cohérence des étapes précédentes, on peut visualiser les objets.

Production des graphiques par station

Définition de la légende et de ses codes couleur

On définit une palette de couleurs pour s’assurer qu’une même situation soit systématiquement représentée par une même couleur dans les graphiques.

Le \n est le retour à la ligne pour que les étiquettes ne prennent pas trop de place sur le graphique

Pour les besoins de la représentation graphique, on complète le fichier avec des NA (données manquantes) pour les mois sans observations. La fonction completer_observations_mois_manquants() est alors utile.

Essai de la fonction graphique

Liste contenant tous les graphiques

Le logiciel R permet la manipulation de nombreuses classes d’objets parmi lesquelles on trouve les listes. Une liste est un ensemble d’élements qui peuvent être de nature différente. Ici, nous allons créer une liste qui contiendra autant d’objets graphiques qu’il y a de stations.

La fonction produire_graph_pour_toutes_les_stations() est une “moulinette” qui permet d’appliquer la fonction de production du graphique (produire_graph_pour_une_station()) non pas à une station, mais à un ensemble.

Cette liste servira soit pour afficher les graphiques sous la forme de popups dans mapview, soit pour les exporter 1 à 1 en .png pour d’autres usages.

Pour vérifier que la liste a bien été créée, on peut afficher certains de ses éléments, par exemple les 10ème à 12ème.

#> 
#> [[2]]

#> 
#> [[3]]

Exportation des graphiques en .png

La fonction exporter_les_graphiques_png exporte chacun des graphiques de la liste au format png, le nomme selon les codes stations. Ils sont stockés dans le répertoire fourni par l’utilisateur. Si le répertoire n’existe pas, la fonction le crée. Sinon, elle écrase son contenu antérieur. Au final, il y a un fichier par station. L’exécution de la fonction prend environ une seconde par station.

Représentation cartographique

On peut afficher nos résultats dans une fenêtre leaflet au moyen du package mapview avec les popup graphiques.

NB : L’affichage initial prend un peu de temps, variable selon la taille de la région représentée. C’est dû d’une part au chargement des données géographiques et d’autre part au chargement des popups graphiques.


mapviewOptions(basemaps = c("OpenStreetMap", "OpenTopoMap", 
                            "Esri.WorldShadedRelief", "Esri.WorldImagery")) 
# mapviewOptions(default = TRUE) permettrait de revenir au paramétrage par défaut


produire_carte_dynamique (couche_stations = stations_onde_geo,
                          popups_stations = graphiques)
<<<<<<< HEAD
=======
>>>>>>> 5462df1196f2427d082ae7576e0a6efe652a4457